
// js如何实现继承（原型链继承，构造函数继承，组合式继承,ES6class类继承）
// 一.原型链继承(优点：共享父类所有方法属性，缺点：无法向父级传参)
function Person(name){
  this.name=name
  this.info={
    sex:'男',
    age:12
  }
}
Person.prototype.getInfo=function(){
  console.log(this.name);
  console.log(this.info);
}
function Son(numbers){
 this.tel=numbers
}
// // 原型链继承核心
// Son.prototype= new Person('张三')
// var son1=new Son(2)
// son1.info.email='adasd@'
// son1.getInfo()
// console.log(son1.name);
// console.log(son1.info);

// 二.构造函数继承()
// function Person(gender) {
//   this.user={
//     name:'张三',
//     gender:gender
//   }
// }
// function Son(gender){
  // //核心步骤
//   Person.call(this,gender)
// }
// var son1=new Son('12')
// son1.user.sex='男'
// console.log(son1.user);

// 三，组合式继承
// function Person(gender) {
//   console.log('执行次数');
//   this.user={
//     name:'张三',
//     gender:gender
//   }
// }
// // //原型链继承原型上的属性和方法
// Person.prototype.getInfo=function(){
//   console.log(this.user.name);
//   console.log(this.user.gender);
// }
// function Son(gender){
//   //构造函数实现传参
//   Person.call(this,gender)
// }
// Son.prototype=new Person()
// let son1=new Son('男')
// son1.getInfo()
// console.log(son1.user.gender);

// 四.ES6class类继承
// class Parent{
//   constructor(kind)
//   {
//     this.kind=kind
//   }
//   getKind(){
//     return this.kind
//   }
// }
// class Son extends Parent{
//   constructor(name){
//     // 子类构造方法调用super并给父级传参数
//     super('大萨达')
//     this.name=name
//   }
//   getCatinfo(){
//     // super关键字只能在子类的构造函数中使用，并且它只能用于调用父类的构造函数或访问父类原型上的方法。不能访问属性因为继承性可以用this访问
//    console.log( this.name+':'+super.getKind());
//   }
// }
// var son1=new Son('杰哥')
// son1.getCatinfo()